// 同时发送异步代码的次数 通过这个来决定 发送多少个请求 之后 等于0的时候 才关闭 loading效果 
// includes() 方法用于判断字符串是否包含指定的子字符串。如果找到匹配的字符串则返回 true，否则返回 false。注意： includes() 方法区分大小写。
let ajaxTimes = 0;
export function request(options) { //传递过来的参数 
  //传递过来的配置参数 resolve 这个本身就是回调函数 成功后调用 reject 失败后调用
  //优化空间 baseurl 等  定义公共的url
  const baseUrl = "https://api-hmugo-web.itheima.net/api/public/v1";
  // 判断 url中是否带有 /my/ 请求的是私有的路径 带上header token
  let header = { ...options.header }; //不写死 让其实现动态的设置header的属性 不然 直接 { } 就写死了 
  if (options.url.includes("/my/")) {
    // 拼接header 带上token
    header["Authorization"] = wx.getStorageSync("token");
  }

  // 发送请求的时候就开启这loading事件  显示加载中 效果
  ajaxTimes++;
  wx.showLoading({
    title: "加载中",
    mask: true
  });
  // 返回一个promise对象  第一种
  return new Promise((resolve, reject) => {
    //发送请求
    wx.request({
      url: baseUrl + options.url,
      method: options.method || 'get',
      data: options.data || {},
      header: header,
      // success:resolve, 
      success: function (res) { resolve(res.data.message) },//直接返回数据数组
      //可以 success ：function(res)  {resolve(res)} fail 也一样 因为本身就是回调函数 resolve 你这个写也是一个回调
      fail: reject, //失败的时候触发
      complete: () => {  //成功和失败都会触发
        ajaxTimes--; //到0的时候在关闭
        if (ajaxTimes === 0) {
          //  关闭正在等待的图标
          wx.hideLoading();
        }
      }
    })
  })

  /* // 返回一个promise对象  第二种
   return new Promise((resolve,reject) => {
    //发送请求
    wx.request({
      ...options, //直接解构 传递过来的参数
       url:baseUrl+options.url,
      success:resolve, 
      //可以 success ：function(res)  {resolve(res)} fail 也一样 因为本身就是回调函数 resolve 你这个写也是一个回调
      fail:reject
    })
  })*/
}
/**
 * 还有很多待优化 baseurl  + 响应数据直接data
 */